package com.sise.stuteaintersys.service;

import com.github.pagehelper.PageInfo;
import com.sise.stuteaintersys.bean.base.ModifyResponse;
import com.sise.stuteaintersys.bean.entity.*;
import com.sise.stuteaintersys.bean.vo.*;
import com.sise.stuteaintersys.bean.vo.element.CourseIndexResponseVO;

import java.util.Date;

/**
 * @ClassName  CourseService
 * @Description  用于返回与课程相关的信息
 * @Date 2018/12/29 22:29
 * @Version 1.0
 **/
public interface StudentCourseService {
    /**
    * 返回主页要显示的数据
    *@return MainResponse主页所需的全部数据
    *@Date 2018/12/29
    *@Time 12:03
    */
    MainResponseVO responseMain();


    /**
     *  点击进入该课程的时候，返回对应的数据
     *
     *@param  id 课程编号
     *@return 返回对应的课程数据
     *@date 2018/12/30
     *@time 23:41
     */
    CourseMainVO getCourseBody(Integer id);
    /**
     *  返回课程的留言信息
     *
     *@param  pageNum
     *@param  pageSize
     *@param  courseId 课程编号
     *@return 返回课程的留言信息
     *@date 2019/1/1
     *@time 22:36
     */
    PageInfo<Message> listMessage(Integer pageNum, Integer pageSize, Integer courseId);

    /**
     *  新增留言
     *
     *@param messageAddVo
     *@return boolean
     *@date 2019/1/3
     *@time 13:35
     */

    boolean insertMessage(MessageAddVO messageAddVo);
    /**
     *  返回课程的试卷套
     *
     *@param  pageNum
     *@param  pageSize
     *@param  courseId 课程编号
     *@return 返回课程的试题套
     *@date 2019/1/1
     *@time 22:36
     */
    PageInfo<ExamCourse> listExam(Integer pageNum, Integer pageSize, Integer courseId);
    /**
     *  显示试卷内容
     *
     *@param examType
     *@return List<Question>
     *@date 2019/1/3
     *@time 12:01
     */
    ExamResultVO listQuestion(String examType,Integer courseId,Integer studentId);
    /**
     *  提交试卷
     *
     *@param
     *@return
     *@dateTime 2019/1/18 15:39
     */
    ModifyResponse insertExamResult(ExamResult examResult);
    /**
     *  返回课程的下载资源
     *
     *@param  pageNum
     *@param  pageSize
     *@param  courseId 课程编号
     *@return 返回课程的下载资源
     *@date 2019/1/1
     *@time 22:36
     */
    PageInfo<DownloadInfo> listDownloadInfo(Integer pageNum, Integer pageSize, Integer courseId);

    /**
     *  返回课程的最新作业
     *
     *@param  pageNum
     *@param  pageSize
     *@param  courseId 课程编号
     *@return 课程的作业题目
     *@date 2019/1/1
     *@time 22:36
     */
    PageInfo<Homework> listHomework(Integer pageNum, Integer pageSize, Integer courseId);

    /**
     * 作业列表
     *
     *@param  pageNum
     *@param  pageSize
     *@param  courseId 课程编号
     *@return 课程的作业列表n
     *@date 2019/1/6
     *@time 15:00
     */
    PageInfo<HomeworkDateVO> AllHomework(Integer pageNum, Integer pageSize, Integer courseId);

    /**
     *  一次作业的全部题目
     *
     *@param date
     *@return
     *@date 2019/1/6
     *@time 15:17
     */
    HomeworkResultVO getHomework(Date date, Integer courseId, Integer studentId);

    /**
     *  提交作业
     *
     *@param homeworkResult
     *@return
     *@dateTime 2019/1/17 22:18
     */
    ModifyResponse commitHomework(HomeworkResult homeworkResult);


    /**
     * 根据课程名字进行模糊查询
     * @param pageNum
     * @param pageSize
     * @param courseName
     * @return
     */
    PageInfo<CourseIndexResponseVO> findCourseByCourseName(Integer pageNum, Integer pageSize, String courseName);

    /**
     * 根据课程名字进行模糊查询
     * @param pageNum
     * @param pageSize
     * @param teacherName
     * @return
     */
    PageInfo<CourseIndexResponseVO> findCourseByTeacherName(Integer pageNum, Integer pageSize, String teacherName);
    /**
     *  通过专业分向名称返回课程
     *
     *@param pageNum
     *@param pageSize
     *@param professionName 专业分向名称
     *@return 分页返回该专业分向的所有名称
     *@date 2018/12/30
     *@time 23:41
     */
    PageInfo<CourseIndexResponseVO> listProfessionFind(Integer pageNum, Integer pageSize, String professionName);

    /**
     *  通过课程分类名称返回课程
     *
     *@param pageNum
     *@param pageSize
     *@param courseType 课程分类
     *@return 分页返回该课程分类的所有名称
     *@date 2018/12/30
     *@time 23:41
     */
    PageInfo<CourseIndexResponseVO> listCourseTypeFind(Integer pageNum, Integer pageSize,String courseType);



    /**
     *  搜索
     *
     *@param pageNum
     *@param pageSize
     *@param course
     *@return
     *@date 2018/12/30
     *@time 23:41
     */
    PageInfo<Course> selectCourse(Integer pageNum, Integer pageSize, Course course);

    /**
     *  参加课程
     *
     *@param studentCourse
     *@return boolean
     *@date 2019/1/5
     *@time 23:58
     */
    boolean joinCourse(StudentCourse studentCourse);

    /**
     *  通过学生编号返回课程
     *
     *@param pageNum
     *@param pageSize
     *@param id
     *@return 分页返回
     *@date 2018/12/30
     *@time 23:41
     */
    PageInfo<Course> listCourse(Integer pageNum, Integer pageSize, Integer id);

    /**
     *  通过学生编号返回课程
     *
     *@param pageNum
     *@param pageSize
     *@param id
     *@return
     *@date 2019/1/6
     *@time 11:30
     */
    PageInfo<Course> finishedCourse(Integer pageNum, Integer pageSize, Integer id);

}
